//import cn.hutool.core.util.ReflectUtil;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.example.common.core.Result;
//import com.example.common.rc.aop.dicttrans.dictaop.DictCode2Name;
//import com.example.common.rc.aop.dicttrans.dictaop.NeedTransLate;
//import com.example.crud.sys.api.CommonAPI;
//import com.example.crud.sys.model.DictModel;
//import java.lang.reflect.Field;
//import java.util.Arrays;
//import java.util.List;
//import java.util.Map;
//import java.util.Optional;
//import java.util.stream.Collectors;
//import lombok.SneakyThrows;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
///**
// * @Description: 字典aop类
// * @Author: dangzhenghui
// * @Date: 2019-3-17 21:50
// * @Version: 1.0
// */
//@Aspect
//@Component
//@Slf4j
//public class DictAopbak {
//
//    //@Lazy
//    @Autowired
//    private CommonAPI commonAPI;
//
//    //    @Pointcut("execution(* common.core..*BaseController.*(..))")
//    @Pointcut("execution(* org.jeecg.common..*.BaseController.*(..))")
//    public void p1() {
//    }
//
//    @Pointcut("execution(* org.jeecg.modules..*.*Api.*(..))")
//    public void p2() {
//    }
//
//    @Pointcut("execution(* org.jeecg.modules..*.*Controller.*(..))")
//    public void p3() {
//    }
//
//    //@Around("execution(public * org.jeecg.modules..*.*Api.*(..)) && @annotation(needTransLate)")
//
//    /**
//     * 反式dict末
//     * <p>
//     * Result<Ipage<T></>></>
//     *
//     * @param pjp           pjp
//     * @param needTransLate 后期需要反式 入参
//     * @return {@link Object }
//     * @author zjarlin
//     * @since 2023/03/25
//     */
//    @Around("(p1()||p2()||p3())&& @annotation(needTransLate)")
//    @SneakyThrows
//    public Object transLateDict(ProceedingJoinPoint pjp, NeedTransLate needTransLate) {
//        Object proceed = pjp.proceed();
//        boolean b = needTransLate.useSysDefaultDict();
//        if (!b) {
//            return proceed;
//        }
//        if (proceed instanceof Result) {
//            Result result = (Result) proceed;
//            Object resultOutVO = result.getResult();
//
//            if (resultOutVO instanceof IPage) {
//                IPage resultOutVO1 = (IPage) resultOutVO;
//                List records = resultOutVO1.getRecords();
//                records.forEach(this::transOutVO);
//                resultOutVO1.setRecords(records);
//                result.setResult(resultOutVO1);
//            } else if (resultOutVO instanceof List) {
//                List resultOutVO1 = (List) resultOutVO;
//                resultOutVO1.forEach(this::transOutVO);
//                result.setResult(resultOutVO1);
//            } else {
//                this.transOutVO(resultOutVO);
//                result.setResult(resultOutVO);
//            }
//
//            return result;
//
//        }
//        this.transOutVO(proceed);
//        return proceed;
//    }
//
//    /**
//     * 实体上带有注解的翻译成中文
//     *
//     * @param obj 记录
//     */
//    private void transOutVO(Object obj) {
//        Field[] declaredFields = obj.getClass().getDeclaredFields();
//        Arrays.stream(declaredFields)
//            .filter(field -> field.isAnnotationPresent(DictCode2Name.class))
//            .forEach(field -> {
//                field.setAccessible(true);
//                DictCode2Name annotation = field.getAnnotation(DictCode2Name.class);
//                String dictCode = Optional.ofNullable(annotation.value()).orElse(annotation.dicCode());
//                String fieldDictValue = (String) ReflectUtil.getFieldValue(obj, field);
//
//                if (!annotation.isMulti()) {
//                    String fieldDictName = commonAPI.translateDict(dictCode, fieldDictValue);
//                    ReflectUtil.setFieldValue(obj, field, fieldDictName);
//                } else {
//
//                    Map<String, List<DictModel>> stringListMap = commonAPI.translateManyDict(dictCode, fieldDictValue);
//                    List<DictModel> dictModels = stringListMap.get(dictCode);
//                    String labels = dictModels.stream()
//                        .map(DictModel::getLabel)
//                        .collect(Collectors.joining(","));
//                    ReflectUtil.setFieldValue(obj, field, labels);
//                }
//
//            });
//    }
//
//}
